home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / parallax / mac_sit.hqx / Parallaxis 2.11 / fractal.z < prev    next >
Text File  |  1992-01-09  |  6KB  |  198 lines

  1. START
  2. 127 PE
  3. 3 PORTS
  4. SCALAR     I2 R1 R127 I2 R1
  5. VECTOR     I1 R3
  6.     1  :    GOTO 134;
  7.     2  :    PROC 1 VECTOR I1;
  8.         POPV VI1:1;
  9.         VI[VI1:1] := 0;
  10.         PUSHV VI1:1;
  11.         RETURN;
  12.     3  :    PROC 1;
  13.         ERROR "value out of range";
  14.         RETURN;
  15.     4  :    PROC 1
  16.         SCALAR    
  17.         VECTOR     I2 I1 B1; group number 1
  18.         PUSHV ADDR VI1:2;
  19.     5  :    VI1:1 := ID - 1; for TREE calculating DIMi
  20.         VI1:1 := VI1:1 + 1;      DIM1
  21.     6  :    VI1:3 := 2 * VI1:1;
  22.     7  :    VI1:3 := VI1:3 - 1;
  23.     8  :    VI1:2 := VI1:3;
  24.         VI1:2 := VI1:2 + 1;
  25.         IF VI1:3 < 0 CALL 2;
  26.         IF VI1:3 > 126 CALL 2;
  27.         CONNECT 1 TO 2 AT VI1:2;
  28.     9  :    VI1:3 := 2 * VI1:1;
  29.    10  :    VI1:3 := VI1:3 + 1;
  30.    11  :    VI1:3 := VI1:3 - 1;
  31.    12  :    VI1:2 := VI1:3;
  32.         VI1:2 := VI1:2 + 1;
  33.         IF VI1:3 < 0 CALL 2;
  34.         IF VI1:3 > 126 CALL 2;
  35.         CONNECT 3 TO 2 AT VI1:2;
  36.    13  :    VI1:3 := VI1:1 MOD 2;
  37.    14  :    VB1:1 := VI1:3;
  38.    15  :    VB1:1 := NOT VB1:1;
  39.    16  :    IF VB1:1 CALL 17;
  40.         GOTO 22;
  41.    17  :    PROC 2;
  42.    18  :    VI1:3 := VI1:1 / 2;
  43.    19  :    VI1:3 := VI1:3 - 1;
  44.    20  :    VI1:2 := VI1:3;
  45.         VI1:2 := VI1:2 + 1;
  46.         IF VI1:3 < 0 CALL 2;
  47.         IF VI1:3 > 126 CALL 2;
  48.         CONNECT 2 TO 1 AT VI1:2;
  49.    21  :    RETURN;
  50.    22  :    VI1:3 := VI1:1 MOD 2;
  51.    23  :    VB1:1 := VI1:3;
  52.    24  :    IF VB1:1 CALL 25;
  53.         GOTO 30;
  54.    25  :    PROC 2;
  55.    26  :    VI1:3 := VI1:1 / 2;
  56.    27  :    VI1:3 := VI1:3 - 1;
  57.    28  :    VI1:2 := VI1:3;
  58.         VI1:2 := VI1:2 + 1;
  59.         IF VI1:3 < 0 CALL 2;
  60.         IF VI1:3 > 126 CALL 2;
  61.         CONNECT 2 TO 3 AT VI1:2;
  62.    29  :    RETURN;
  63.    30  :    POPV VI1:2;
  64.    31  :    RETURN;    group number : 1
  65.    32  :    PROC 1;    configuration : TREE
  66.         VI0:1 := ID - 1; for TREE calculating DIMi
  67.         VI0:1 := VI0:1 + 1;      DIM1
  68.         RETURN;    configuration : TREE
  69.    33  :    PROC 1 
  70.         SCALAR     I1 I1
  71.         VECTOR     R2 I1 R1    ;     GAUSS
  72.    34!23  :    VR1:2 := 0.00000; line 23 column 2 
  73.    35!24  :    SI1:1 := 1; line 24 column 2 
  74.    36  :    SI1:2 := 4;
  75.    37!24  :    IF SI1:1 > SI1:2 GOTO 43; line 24 column 2 
  76.    38!24  :    VI1:1 := RANDOM; line 24 column 19 
  77.    39  :    VR1:3 := VI1:1;
  78.    40  :    VR1:2 := VR1:2 + VR1:3;
  79.    41  :    SI1:1 := SI1:1 + 1;
  80.    42  :    GOTO 37;
  81.    43!25  :    VR1:3 := 5.28596e-05 * VR1:2; line 25 column 2 
  82.    44  :    VR1:1 := VR1:3 - 3.46410;
  83.    45  :    GOTO 46; RETURN
  84.    46!26  :    PUSHV VR1:1;
  85.    47  :    RETURN;     GAUSS
  86.    48  :    PROC 1 
  87.         SCALAR     I1 B1 I2    ;     INORDER
  88.    49!28  :    POPS SI1:1;
  89.    50!31  :    SB1:1 := SI1:1 <= 127; line 31 column 2 
  90.    51  :    IF SB1:1 = FALSE GOTO 66;
  91.    52!32  :    SI1:2 := 2 * SI1:1; line 32 column 4 
  92.    53  :    PUSHS SI1:2;
  93.    54  :    CALL 48; INORDER
  94.    55!33  :    IF SI1:1 < 1 CALL 3; line 33 column 6 
  95.    56  :    IF 127 < SI1:1 CALL 3;
  96.    57  :    SI1:2 := ADDR SR0:2 - SIZE( R1 );
  97.    58  :    SI1:3 := SI1:1 * SIZE( R1 );
  98.    59  :    SI1:2 := SI1:2 + SI1:3;
  99.    60  :    WRITE SR[SI1:2] 10 3;
  100.    61!34  :    WRITE EOL; line 34 column 6 
  101.    62!35  :    SI1:2 := 2 * SI1:1; line 35 column 4 
  102.    63  :    SI1:2 := SI1:2 + 1;
  103.    64  :    PUSHS SI1:2;
  104.    65  :    CALL 48; INORDER
  105.    66!37  :    RETURN;     INORDER
  106.    67  :    PROC 1 
  107.         SCALAR     R1 I4 I1 B1
  108.         VECTOR     B3 R2 I1    ;     MIDPOINTREC
  109.    68!39  :    POPS SI1:1;
  110.    69  :    POPS SR1:1;
  111.    70!43  :    SI1:5 := SI1:1 - 1; line 43 column 2 
  112.    71  :    SI1:2 := 2 ^ SI1:5;
  113.    72!44  :    SI1:5 := 2 * SI1:2; line 44 column 2 
  114.    73  :    SI1:3 := SI1:5 - 1;
  115.    74!45  :    SI1:5 := 2 * SI1:3; line 45 column 2 
  116.    75  :    SI1:4 := SI1:5 + 1;
  117.    76!47  :    CALL 32; line 47 column 2 
  118.    77!48  :    VB1:1 := TRUE; line 48 column 4 
  119.    78  :    VB1:3 := SI1:2 <= ID;
  120.    79  :    IF VB1:3 = FALSE CALL 82;
  121.    80  :    IF VB1:1 CALL 85;
  122.    81  :    GOTO 89;
  123.    82  :    PROC 2;
  124.    83  :    VB1:1 := FALSE;
  125.    84  :    RETURN;
  126.    85  :    PROC 2;
  127.    86  :    VB1:3 := ID <= SI1:3;
  128.    87  :    VB1:1 := VB1:3;
  129.    88  :    RETURN;
  130.    89  :    IF VB1:1 CALL 91;
  131.    90  :    GOTO 99;
  132.    91  :    PROC 2;
  133.    92!49  :    VR1:2 := VR0:2 + VR0:3; line 49 column 6 
  134.    93  :    VR1:2 := 0.500000 * VR1:2;
  135.    94  :    CALL 33; GAUSS
  136.    95  :    POPV VR1:1;
  137.    96  :    VR1:1 := SR1:1 * VR1:1;
  138.    97  :    VR0:1 := VR1:2 + VR1:1;
  139.    98  :    RETURN;
  140.    99!53  :    VB1:1 := TRUE; line 53 column 4 
  141.   100  :    VB1:3 := SI1:2 <= ID;
  142.   101  :    IF VB1:3 = FALSE CALL 104;
  143.   102  :    IF VB1:1 CALL 107;
  144.   103  :    GOTO 111;
  145.   104  :    PROC 2;
  146.   105  :    VB1:1 := FALSE;
  147.   106  :    RETURN;
  148.   107  :    PROC 2;
  149.   108  :    VB1:3 := ID <= SI1:4;
  150.   109  :    VB1:1 := VB1:3;
  151.   110  :    RETURN;
  152.   111  :    IF VB1:1 CALL 113;
  153.   112  :    GOTO 133;
  154.   113  :    PROC 2;
  155.   114!55  :    PROPAGATE VR0:2 OUT 1 IN 2; line 55 column 6 
  156.   115!56  :    PROPAGATE VR0:3 OUT 3 IN 2; line 56 column 6 
  157.   116!57  :    PROPAGATE VR0:1 OUT 1 IN 2; line 57 column 6 
  158.   117!58  :    PROPAGATE VR0:1 OUT 3 IN 2; line 58 column 6 
  159.   118!59  :    VI1:1 := ID MOD 2; line 59 column 6 
  160.   119  :    VB1:3 := VI1:1;
  161.   120  :    VB1:3 := NOT VB1:3;
  162.   121  :    VB1:2 := TRUE;
  163.   122  :    IF VB1:3 CALL 128;
  164.   123  :    IF VB1:2 CALL 125;
  165.   124  :    GOTO 132;
  166.   125  :    PROC 2;
  167.   126!59  :    VR0:2 := VR0:1; line 59 column 39 
  168.   127  :    RETURN;
  169.   128  :    PROC 2;
  170.   129  :    VB1:2 := FALSE;
  171.   130!59  :    VR0:3 := VR0:1; line 59 column 26 
  172.   131  :    RETURN;
  173.   132  :    RETURN;
  174.   133!62  :    RETURN;     MIDPOINTREC
  175.   134  :    CALL 4;    connections
  176.   135!66  :    CALL 32; line 66 column 2 
  177.   136!67  :    VR0:2 := 0.00000; line 67 column 4 
  178.   137!68  :    VR0:3 := 1.00000; line 68 column 4 
  179.   138!69  :    VR0:1 := 0.00000; line 69 column 4 
  180.   139!71  :    SI0:1 := 1; line 71 column 2 
  181.   140  :    SI0:3 := 7;
  182.   141!71  :    IF SI0:1 > SI0:3 GOTO 151; line 71 column 2 
  183.   142!72  :    SI0:4 := SI0:1 + 1; line 72 column 4 
  184.   143  :    SR0:129 := SI0:4;
  185.   144  :    SR0:129 := SR0:129 / 2.00000;
  186.   145  :    SR0:1 := 0.500000 ^ SR0:129;
  187.   146!73  :    PUSHS SR0:1; line 73 column 4 
  188.   147  :    PUSHS SI0:1;
  189.   148  :    CALL 67; MIDPOINTREC
  190.   149  :    SI0:1 := SI0:1 + 1;
  191.   150  :    GOTO 141;
  192.   151!75  :    CALL 32; line 75 column 2 
  193.   152  :    STORE VR0:1 TO SR0:2;
  194.   153!76  :    PUSHS 1; line 76 column 2 
  195.   154  :    CALL 48; INORDER
  196.   155  :    END;    FRACTAL
  197. STOP
  198.